O filtro gaussiano possui apenas um parâmetro livre, que é a frequência de corte da filtragem (que basicamente dá a largura do filtro).
Reading the data¶
Lately, the .fits data was transformed into .csv and saved in database/csv_files. We are going to import a light curve sample and work with it.
[2]:
FILE_PATH = '/content/drive/MyDrive/01 - Iniciação Científica/02 - Datasets/csv_files/EN2_STAR_CHR_0101086161_20070516T060226_20071005T074409.csv'
[3]:
import pandas as pd
data_sample = pd.read_csv(FILE_PATH)
display(data_sample)
| DATE | WHITEFLUX | |
|---|---|---|
| 0 | 2007-05-16 18:10:55.071642 | 112626.77 |
| 1 | 2007-05-16 18:19:27.113766 | 112605.61 |
| 2 | 2007-05-16 18:27:59.155929 | 112771.50 |
| 3 | 2007-05-16 18:36:31.198092 | 113113.60 |
| 4 | 2007-05-16 18:45:03.240256 | 112621.79 |
| ... | ... | ... |
| 23946 | 2007-10-05 19:08:02.358665 | 112438.61 |
| 23947 | 2007-10-05 19:16:34.313684 | 112406.01 |
| 23948 | 2007-10-05 19:25:06.268742 | 112496.13 |
| 23949 | 2007-10-05 19:33:38.223801 | 112344.83 |
| 23950 | 2007-10-05 19:42:10.178859 | 112318.50 |
23951 rows × 2 columns
[4]:
import numpy as np
x = data_sample.DATE.to_numpy()
y = data_sample.WHITEFLUX.to_numpy()
Gaussian Transfer Function¶
The transfer function of a Gaussian 1-D lowpass filter (GLPFs)

where
and
was defined on 03 - Ideal Lowpass Filters.ipynb.
Note. The cutoff frequency must be given in Nyquist.
[5]:
cutoff_freq = 0.2
[6]:
def gaussian_array(array, fourier_transform, cutoff_freq):
# Extrating information of the signal
n_time = len(array)
D0 = cutoff_freq * n_time
xc = n_time
# Creating the filter array
len_filter = len(fourier_transform)
filter = np.zeros(len_filter)
for i in range(len_filter):
filter[i] = exp( (-(i-(xc-1.0))**2)/(2*((cutoff_freq * n_time)**2)) )
return filter
Choosing the best Gaussian parameters¶
On filters module, we can pass gaussian on the filter_technique and it will makes all the procedures for the Butterworth Lowpass filter.
[7]:
from tools import *
Plotting different cutoff frequencies¶
[8]:
cutoff_freqs = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
[22]:
i = 0
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[23]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[24]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[25]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[26]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[27]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[28]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[29]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1
[30]:
cutoff_freq = cutoff_freqs[i]
Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1